"""
1、http错误 使用@app.errorhandle装饰器定义对特定http响应码的错误处理函数。
2、蓝图中的错误处理：在蓝图中定义错误处理函数，允许模块化的错误处理
3、自定义错误 定义自定义类，并在应用中捕获和处理这些异常
4、全局错误处理 使用错误处理函数捕获所有未处理的异常
5、使用abort函数 在视图函数中主动触发http错误
6、渲染自定义错误界面 为每个错误码创建自定义的html界面
"""

#1、处理http错误 允许针对特定的http状态码的处理函数
from flask import Flask,render_template
app=Flask(__name__)

@app.route('/')
def index():
    return 'Welcome to the homepage'

@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

@app.errorhandler(404)
def internal_server_error(error):
    return render_template('500.html'), 500

if __name__ == '__main__':
    app.run(debug=True)
# @app.errorhandler(404) 捕获404错误，并返回自定义404错误界面
# @app.errorhandler(500) 捕获500错误，并返回自定义的500错误界面

#2.使用蓝图中的错误处理
#auth/routes.py文件代码
from flask import Blueprint,render_template

auth=Blueprint('auth',__name__)
@auth.errorhandler(404)
def auth_not_found(error):
    return render_template('auth_404.html'), 404

#app文件中的代码
from flask import Flask
from auth.routes import auth

app=Flask(__name__)
app.register_blueprint(auth,url_prefix='/auth')

if __name__=='__main__':
    app.run(debug=True)

#4、全局错误处理
@app.errorhandler(Exception)
def hanle_exception(error):
    return f'An error occurred{error}' , 500

#5、使用abort函数
from flask import abort
@app.route('/abort_example')
def abort_example():
    abort(403) #返回403错误

#6自定义错误界面参考 template/404.html